<?php

/**
 * Modelo de datos para los documentos
 *
 * @author Israel Mora e Ismael Garcia
 */
require_once "../sistema/ModelPersistent.class.php";

class Doc extends ModelPersistent {

    private $table = "documents";

    public function __construct() {
        parent::__construct($this->table);
    }
    
    /**
     * Función que sube un nuevo fichero al servidor y posteriormente crea un registro
     * en la base de datos con los datos del mismo.
     * @param Array $data array con los datos físicos del fichero
     * @param Array $datos array con los datos a insertar en la BD sobre el fichero
     */
    public function insertDoc($data, $datos) {
        //foreach ($data as $fitxer) {         // para cada elemento del array $_FILES ...  
            if ($data['error'] == 0 && $data['size'] > 0 && $data['size'] < 3000000) { //SI es correcto  ..
                $doc['fitxer'] = $data['name'];
                $doc['titol'] = $datos['titol'];
                $doc['rol_show'] = $datos['rol_show'];
                $doc['rol_edit'] = $datos['rol_edit'];
                $doc['document_id'] = hash_file('md5', $data['tmp_name']);
                $this->insertRecord($doc);           
                $ruta = realpath(dirname(__FILE__)) . '/../docs/';
                move_uploaded_file($data['tmp_name'], $ruta . $doc['document_id']);   // guardamos el fichero
            }
    }
    
    /**
     * Función que borra del servidor el fichero a indicado y posteriormente su registro
     * correspondiente de la base de datos
     * @param Int $id id del fichero a borrar.
     */
    public function deleteDoc($id){
        $route = $this->getRecord($id);
        unlink(realpath(dirname(__FILE__)) . '/../docs/'. $route["document_id"]);
        $this->deleteRecord($id);
    }
    
    /**
     * Función que abre el dialogo de descarga del fichero seleccionado
     * @param Array $fileArray array con los datos de la BD sobre el fichero
     */
    public function getFile($fileArray){

        $root = realpath(dirname(__FILE__)) . "/../docs/";
        $name = basename($fileArray["document_id"]);
        $path = $root. $name;
        $type = '';

        if (is_file($path)) {
//            $info = finfo_open(FILEINFO_MIME_TYPE);
//            $type = finfo_file($info, $path);
//            finfo_close($info);
//            
//            if ($type == '') {
                $type = "application/force-download";
//            }
                
            if(hash_file('md5', $path) == $fileArray["document_id"]){
                // Definir headers
                //Guia: http://www.mcanam.com/articulos/PHP.php?id=9
                header('Content-Type: '. $type);
                header('Content-Transfer-Encoding: binary');
                header('Content-Disposition: attachment; filename="'. $fileArray["fitxer"].'"');
                header('Content-Length: ' . filesize($path));
                // Descargar archivo
                readfile($path);
            }else{
                echo("Fichero corrupto");
            }
        } else {
            die("El archivo no existe.");
        }
   }
   
   /**
    * Cambia el parametro aprovat del fichero seleccionado.
    * Si está aprobado lo desaprueba y vicebersa
    * @param Int $id id del fichero a modificar
    */
   public function changeAprovat($id){
            $value = $this->_doc->getRecord($id);
            if ($id==0){
                $value["aprovat"] = 1;
            }else if($id==1)
                $value["aprovat"] = 0;
            $this->updateRecord($value);
   }
   
   /**
    * Establece el parametro aprovat del documento deseado
    * @param Int $id id del documento a modificar
    * @param Int $boolean valor que se  le quiere dar. 0 = no aprobado 1 = aprobado.
    */
   public function setAprovat($id, $boolean){
            $value = $this->_doc->getRecord($id);
            if ($boolean == true){
                $value["aprovat"] = 1;
            }else if($boolean == false)
                $value["aprovat"] = 0;
            $this->updateRecord($value);
   }
}
?>
